package webPages;

import modelo.Disponibilidad;
import modelo.Empleado;

import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.PropertyListView;
import org.apache.wicket.model.CompoundPropertyModel;
import org.uqbar.commons.model.UserException;

import applicationModels.IntObservable;

public class EditarEmpleadoPage extends BasePage {

	private final Empleado model;
	private Empleado empleadoBackup;
	
	public EditarEmpleadoPage(Empleado empleado) {
		this.model = empleado;
		//Si viene de una llamada a crear empleado los campos van a ser null, chequea antes de llamar a clonar
		if(empleado.getNombre() != null){
			this.empleadoBackup = model.clonar();
		}
		Form<Empleado> editarEmpleadoForm = new Form<Empleado>("editarEmpleadoForm", new CompoundPropertyModel<Empleado>(this.model));
		this.agregarCamposEdicion(editarEmpleadoForm);
		this.agregarTablaDisponibilidades(editarEmpleadoForm);
		this.agregarAcciones(editarEmpleadoForm);
		this.add(editarEmpleadoForm);
	}

	private void agregarTablaDisponibilidades(Form<Empleado> parent) {
		parent.add(new PropertyListView<Disponibilidad>("disponibilidades") {

			private static final long serialVersionUID = 1L;

			@Override
			protected void populateItem(final ListItem<Disponibilidad> item) {
				item.add(new Label("dia"));
				
				IntObservable inicio = item.getModel().getObject().getHorario().getInicio();
				item.add(new Label("horario.inicio" , inicio.toString()));;
				
				IntObservable fin = item.getModel().getObject().getHorario().getFin();
				item.add(new Label("horario.fin" , fin.toString()));
				
				item.add(new Button("editar") {
					@Override
					public void onSubmit() {
						Disponibilidad disponibilidad = item.getModelObject();
						EditarEmpleadoPage.this.editar(disponibilidad);
					}
				});

				item.add(new Button("eliminar") {
					@Override
					public void onSubmit() {
						model.getDisponibilidades().remove(item.getModelObject());
					}
				});
			}

		});
		
	}

	protected void editar(Disponibilidad disponibilidad) {
		EditarDisponibilidadPage page = new EditarDisponibilidadPage(disponibilidad);
		this.setResponsePage(page);
	}

	protected void agregarAcciones(Form<Empleado> parent) {
		parent.add(new Button("aceptar") {
			@Override
			public void onSubmit() {
				try {
					volver();
				} catch (UserException e) {
					info(e.getMessage());
				} catch (Exception e) {
					error("Ocurrio un error, jaja estas al horno");
				}
			}

			
		});
		parent.add(new Button("cancelar") {
			@Override
			public void onSubmit() {
				volver();
			}

		});
	}
	
	protected void volver() {
		model.backup(this.empleadoBackup);
		this.setResponsePage(ListadoEmpleadosPage.class);
	}

	private void agregarCamposEdicion(Form<Empleado> parent) {
		parent.add(new TextField<String>("nombre"));
		parent.add(new TextField<String>("apellido"));
		parent.add(new TextField<String>("legajo"));
	}

	
}
